package com.tarena.lbs.activity.dao.repository.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.tarena.lbs.activity.api.pojo.ActivityDto;
import com.tarena.lbs.activity.dao.mapper.ActivityMapper;
import com.tarena.lbs.activity.dao.repository.ActivityRepository;
import com.tarena.lbs.activity.pojo.query.ActivityQuery;
import com.tarena.lbs.activity.pojo.vo.ActivityVO;
import com.tarena.lbs.base.protocol.pager.PageResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import java.util.List;

@Slf4j
@Repository
public class ActivityRepositoryImpl implements ActivityRepository {
    @Autowired
    private ActivityMapper activityMapper;

    @Override
    public int insert(ActivityVO activityVO) {
        log.debug("[数据访问层]处理新增活动,入参{}", activityVO);
        return activityMapper.insert(activityVO);
    }

    @Override
    public int update(ActivityVO activityVO) {
        log.debug("[数据访问层]处理更新活动,入参{}", activityVO);
        return activityMapper.updateById(activityVO);
    }

    @Override
    public ActivityVO selectDetail(Integer id) {
        log.debug("[数据访问层]处理显示活动详情,入参{}", id);
        //查询,返回
        return activityMapper.selectById(id);
    }

    @Override
    public PageResult<ActivityVO> pageList(ActivityQuery query) {
        log.debug("[数据访问层]处理显示活动列表,入参{}", query);

        // 参数校验
        if (query == null) {
            query = new ActivityQuery();
        }

        // 设置分页参数
        int pageNum = query.getPageNo() != null ? query.getPageNo() : 1;
        int pageSize = query.getPageSize() != null ? query.getPageSize() : 10;

        PageHelper.startPage(pageNum, pageSize);

        // 使用 QueryWrapper 构造查询条件
        QueryWrapper<ActivityVO> wrapper = new QueryWrapper<>();

        // 活动标题
        if (query.getStoreName() != null && !query.getStoreName().trim().isEmpty()) {
            wrapper.like("activity_name", query.getStoreName().trim());
        }

        // 活动类型
        if (query.getActivityType() != null) {
            wrapper.eq("activity_type", query.getActivityType());
        }

        // 活动渠道
        if (query.getChannelType() != null) {
            wrapper.eq("channel_type", query.getChannelType());
        }

        // 活动状态
        if (query.getStatus() != null) {
            wrapper.eq("status", query.getStatus());
        }

        // 营销方式
        if (query.getMarketingType() != null) {
            wrapper.eq("marketing_type", query.getMarketingType());
        }

        // 活动开始时间
        if (query.getStartDate() != null) {
            wrapper.ge("start_date", query.getStartDate());
        }

        // 活动结束时间
        if (query.getEndDate() != null) {
            wrapper.le("end_date", query.getEndDate());
        }

        // TODO 区域选择  Duboo调用business查询
//        if (query.getStoreAddress() != null && !query.getStoreAddress().trim().isEmpty()) {
//            wrapper.like("store_address", query.getStoreAddress().trim());
//        }
        List<ActivityVO> result = activityMapper.selectList(wrapper);
        PageInfo<ActivityVO> pageInfo = new PageInfo<>(result);

        PageResult<ActivityVO> pageResult = new PageResult<>();
        pageResult.setObjects(result);
        pageResult.setTotal(pageInfo.getTotal());
        pageResult.setPageSize(pageInfo.getSize());
        pageResult.setPageNo(pageInfo.getPageNum());

        return pageResult;
    }

    @Override
    public int updateActivityStatus(Integer id, Integer status) {
        log.debug("[数据访问层]处理更新活动状态,入参{}", id);
        LambdaUpdateWrapper<ActivityVO> updateWrapper = new LambdaUpdateWrapper<>();
        updateWrapper.eq(ActivityVO::getId, id);
        updateWrapper.set(ActivityVO::getStatus, status);
        return activityMapper.update(null, updateWrapper);
    }

    @Override
    public ActivityDto getActivityById(Integer activityId) {
        log.debug("[数据访问层]处理根据ID获取活动详情,入参{}", activityId);
        return activityMapper.getActivityById(activityId);
    }
}
